/**
 *
 * @description: 正则
 * @author: junyong.hong
 * @createTime: 2018/3/27
 * @version: 1.0.0.0
 * @history:
 *    1、
 *    2、
 *
 */
{
    // es5
    let regex = new RegExp('xyz','i');
    let regex2 = new RegExp(/xyz/i);

    // 输出：true true
    console.log(regex.test('xyz123'), regex2.test('xyz123'));

    // es6
    // 允许第二个参数i覆盖修饰符ig
    let regex3 = new RegExp(/xyz/ig,'i');
    console.log(regex3.flags)
}

// y修饰符
{
    let s = 'bbb_bb_b';
    // g跟y都是全局匹配；但是全局匹配不同点是，g是从上一次匹配继续开始查找（只要能找到，就算匹配成功）
    //                                   y是从下一个匹配，如果第一个匹配不对，就算匹配失败
    // 第一步g跟y都可以匹配到bbb
    // 第二步只有g可以匹配到bb
    let a1 = /b+/g;
    let a2 = /b+/y;

    console.log('one',a1.exec(s),a2.exec(s));
    console.log('two',a1.exec(s),a2.exec(s));

    // 判断一个正则是否使用了y修饰符
    console.log(a1.sticky);
    console.log(a2.sticky);
}

// u修饰符（1、当处理字符串中的正则的长度大于2的时候 2、.是修饰小于2个字节）
{
    // true: \uD83D\uDC2A当成了2个字母（字符）
    console.log('u-1',/^\uD83D/.test('\uD83D\uDC2A'));
    // false: \uD83D\uDC2A当成了1个字母（字符）
    console.log('u-2',/^\uD83D/u.test('\uD83D\uDC2A'));

    // 如果{}放的是unicode编码，要加个u，才能被识别
    // false
    console.log(/\u{61}/.test('a'));
    // true
    console.log(/\u{61}/u.test('a'));

    // 𠮷
    console.log(`\u{20BB7}`);

    let s = '𠮷';
    // false
    console.log('u',/^.$/.test(s))
    // true
    console.log('u',/^.$/u.test(s))

    // false
    console.log('test',/𠮷{2}/.test('𠮷𠮷'));
    // true
    console.log('test-2',/𠮷{2}/u.test('𠮷𠮷'));
}





